///////////////////////////////////////////////////////////
//  IGameApplicationObserver.h
//  Implementation of the Interface IGameApplicationObserver
//  Created on:      11-Jan-2015 4:13:27 PM
//  Original author: Eng. Ahmed Yasser
///////////////////////////////////////////////////////////

#if !defined(EA_6FF1B57F_F2A0_47d5_9499_80CF8835FE16__INCLUDED_)
#define EA_6FF1B57F_F2A0_47d5_9499_80CF8835FE16__INCLUDED_

#include "IGameApplication.h"

namespace EngineGame
{
	namespace EngineCore
	{
		/**
		 * The basic definition of the game application events observer
		 * @author Eng. Ahmed Yasser
		 * @version 1.0
		 * @updated 12-Jan-2015 12:01:55 PM
		 */
		class IGameApplicationObserver
		{

		public:
			IGameApplicationObserver() {

			}

			virtual ~IGameApplicationObserver() {

			}

			IGameApplicationObserver(const IGameApplicationObserver& theIGameApplicationObserver) {

			}

			/**
			 * Handle event when a frame begins rendered on the game application
			 * 
			 * @param gameApplication
			 */
			virtual void onApplicationBeginFrame(IGameApplication* gameApplication) =0;
			/**
			 * Handle event of the game application ending
			 * 
			 * @param gameApplication
			 */
			virtual void onApplicationEnd(IGameApplication* gameApplication) =0;
			/**
			 * Handle event when a frame ends rendered on the game application
			 * 
			 * @param gameApplication
			 */
			virtual void onApplicationEndFrame(IGameApplication* gameApplication) =0;
			/**
			 * Handle event of the starting game application
			 * 
			 * @param gameApplication    The game application that called the event
			 */
			virtual void onApplicationStart(IGameApplication* gameApplication) =0;

		};

	}

}
#endif // !defined(EA_6FF1B57F_F2A0_47d5_9499_80CF8835FE16__INCLUDED_)
